package CreationPattern.Prototype;

import java.io.IOException;
import java.util.Date;

/**
 * @Classname : SerialCopySheepClient
 * @Description : 测试 深拷贝（序列化实现）
 * 注意：深拷贝（序列化实现）会使用无参构造器，字符串和其他引用类型成员变量都会重新创建对象
 * @Author : chentianyu
 * @Date 2023/1/23 22:33
 */


public class SerialCopySheepClient {
    public static void main(String[] args) throws InterruptedException, IOException, ClassNotFoundException {
        System.out.println("测试 深拷贝（序列化实现）\n");
        SerialCopySheep sheep = new SerialCopySheep("多莉");
        sheep.info("原型羊");

        for (int i = 1; i <= 5; i++) {
            Thread.sleep(1000);
            System.out.println();

            SerialCopySheep copySheep = sheep.clone();
            copySheep.info("克隆羊");
            System.out.println("【原始羊0与" + "克隆羊" + i + "比较】" + sheep.compare(copySheep));
            copySheep.setName(i + "莉");
            copySheep.setCode(i);
            copySheep.setBirthday(new Date());
            copySheep.info("克隆羊调整后");
        }
    }
}

/** 20230123
 * 测试 深拷贝（序列化实现）
 *
 * Sheep类[有参]构造器执行
 * 【原型羊】这只羊叫多莉，编号为 0，生于 Mon Jan 23 23:25:42 CST 2023
 *
 * Sheep类[无参]构造器执行
 * 【克隆羊】这只羊叫null，编号为 0，生于 null
 * 【原始羊0与克隆羊1比较】基本类型 code 相同 | 字符串 name 不同 | 引用类型 birthday 不同
 * 【克隆羊调整后】这只羊叫1莉，编号为 1，生于 Mon Jan 23 23:25:44 CST 2023
 *
 * Sheep类[无参]构造器执行
 * 【克隆羊】这只羊叫null，编号为 0，生于 null
 * 【原始羊0与克隆羊2比较】基本类型 code 相同 | 字符串 name 不同 | 引用类型 birthday 不同
 * 【克隆羊调整后】这只羊叫2莉，编号为 2，生于 Mon Jan 23 23:25:45 CST 2023
 *
 * Sheep类[无参]构造器执行
 * 【克隆羊】这只羊叫null，编号为 0，生于 null
 * 【原始羊0与克隆羊3比较】基本类型 code 相同 | 字符串 name 不同 | 引用类型 birthday 不同
 * 【克隆羊调整后】这只羊叫3莉，编号为 3，生于 Mon Jan 23 23:25:46 CST 2023
 *
 * Sheep类[无参]构造器执行
 * 【克隆羊】这只羊叫null，编号为 0，生于 null
 * 【原始羊0与克隆羊4比较】基本类型 code 相同 | 字符串 name 不同 | 引用类型 birthday 不同
 * 【克隆羊调整后】这只羊叫4莉，编号为 4，生于 Mon Jan 23 23:25:47 CST 2023
 *
 * Sheep类[无参]构造器执行
 * 【克隆羊】这只羊叫null，编号为 0，生于 null
 * 【原始羊0与克隆羊5比较】基本类型 code 相同 | 字符串 name 不同 | 引用类型 birthday 不同
 * 【克隆羊调整后】这只羊叫5莉，编号为 5，生于 Mon Jan 23 23:25:48 CST 2023
 */
